處理 Celery 任務的失敗情況
在現實應用中,任務執行可能會失敗,這可能是由於網絡問題、資源不足、程式錯誤等原因。Celery 允許你處理這些失敗情況,以確保你的應用程式能夠正常運行。
一種處理失敗情況的方式是使用 Celery 的 on_failure 裝飾器。讓我們來看一個示例:
celery_example.py
from celery import Celery
app = Celery('celery_example', broker='pyamqp://guest@localhost//')
@app.task
def my_task(x, y):
try:
result = x / y
return result
except ZeroDivisionError as e:
my_task.on_failure(e)
在這個例子中,我們定義了一個名為 my_task 的 Celery 任務,該任務接受兩個參數 x 和 y,並嘗試執行除法操作。如果除法操作引發 ZeroDivisionError,我們使用 my_task.on_failure(e) 來處理失敗情況。
設定重新嘗試策略
Celery 允許你設定重新嘗試策略,以確保當任務失敗時,它將被重新嘗試執行。你可以在 Celery 配置中設定這些策略。
以下是一個示例,我們將設定任務在失敗時最多重試 3 次,並在每次重試之間等待 10 秒:
celery.py
from celery import Celery
app = Celery('celery_example', broker='pyamqp://guest@localhost//')
app.conf.task_default_retry_delay = 10 # 重試間隔 10 秒
app.conf.task_default_max_retries = 3 # 最多重試 3 次
這樣,當任務失敗時,Celery 將自動重新嘗試執行該任務,最多 3 次,每次重試之間等待 10 秒。